

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
    <title>Changelog &mdash; pysiriproxy v0.0.7 documentation</title>
    <link rel="stylesheet" href="_static/default.css" type="text/css" />
    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
    <script type="text/javascript">
      var DOCUMENTATION_OPTIONS = {
        URL_ROOT:    '',
        VERSION:     '0.0.7',
        COLLAPSE_INDEX: false,
        FILE_SUFFIX: '.html',
        HAS_SOURCE:  true
      };
    </script>
    <script type="text/javascript" src="_static/jquery.js"></script>
    <script type="text/javascript" src="_static/underscore.js"></script>
    <script type="text/javascript" src="_static/doctools.js"></script>
    <link rel="top" title="pysiriproxy v0.0.7 documentation" href="index.html" />
    <link rel="next" title="Object filters" href="writing_objectFilters.html" />
    <link rel="prev" title="The utils module" href="_generated/pysiriproxy_utils.html" /> 
  </head>
  <body>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="genindex.html" title="General Index"
             accesskey="I">index</a></li>
        <li class="right" >
          <a href="py-modindex.html" title="Python Module Index"
             >modules</a> |</li>
        <li class="right" >
          <a href="writing_objectFilters.html" title="Object filters"
             accesskey="N">next</a> |</li>
        <li class="right" >
          <a href="_generated/pysiriproxy_utils.html" title="The utils module"
             accesskey="P">previous</a> |</li>
        <li><a href="index.html">pysiriproxy v0.0.7 documentation</a> &raquo;</li> 
      </ul>
    </div>  

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body">
            
  <div class="section" id="changelog">
<h1>Changelog<a class="headerlink" href="#changelog" title="Permalink to this headline">¶</a></h1>
<p>The following page describes all of the changes that were made for specific
versions of pysiriproxy.</p>
<div class="section" id="release-0-0-7">
<h2>Release 0.0.7<a class="headerlink" href="#release-0-0-7" title="Permalink to this headline">¶</a></h2>
<ol class="arabic simple">
<li>Created a configuration section called &#8216;Debug&#8217;. This section contains a
single configuration property called &#8216;ExitOnConnectionLost&#8217; which, when
set to True, forces the pysiriproxy server to exit completely when an
established connection to the iPhone is lost. This allows an external script
to monitor the server and restart it when it crashes allowing the
connections to be cleanly re-established.</li>
<li>Catching and handling the StopIteration exception which is raised when a
speech rule function uses some form of &#8216;yield&#8217; such that the yield is
sometimes not called. Since yield is not called the generator is empty
and throws the StopIteration exception when next() is called.</li>
<li>Updated the UnicodeItems list in the plist module to include the &#8216;Title&#8217;
key. This fixed the &#8216;Cancel Alarm&#8217; request. The response (list of
alarms) contained unicode data in the &#8216;Title&#8217; entry and thus caused the
iPhone to crash when it was displayed. This fixes that issue.</li>
<li>Merged iOS 6 bug fix from SiriProxy into our branch. This handles a new
type of packet used to clear the context which is similar to a Ping or
Pong message.</li>
<li>Fixed issue 10. When an unknown packet was encountered it was trying to
convert the packet to a hexadecimal string, however, the function did
not exist and thus caused an exception.</li>
<li>Added version key (&#8216;v&#8217;) to all returned objects. Currently set to a
constant value of &#8216;2.0&#8217; which can be configured in the SiriObject class.</li>
<li>Removed all instances of Guzzoni within the code when refering to Apple&#8217;s
web server by name. This is due to the fact that, as of iOS 6, there is
another web server (kryten.apple.com) which means referring to the
server as &#8216;Guzzoni&#8217; is both confusing and incorrect.</li>
<li>Using the hostname base (e.g., Kryten for kryten.apple.com, or Guzzoni
for guzzoni.apple.com) as the name of the Server connection class. This
string will appear in all data logged by this class making it clear
which of Apple&#8217;s servers is actually being used during testing.</li>
</ol>
</div>
<div class="section" id="release-0-0-6">
<h2>Release 0.0.6<a class="headerlink" href="#release-0-0-6" title="Permalink to this headline">¶</a></h2>
<ol class="arabic">
<li><p class="first">Fixed bug with conversion from Python dictionary into a plist object.
Currently there is an issue with the text to speech (tts) tags causing
the iPhone to crash when sent to the phone (the hex characters in the
tags are not being properly handled at this point in time). The current
solution is to remove tts tags from the dictionary entries that contain
tts tags. There was a bug in the previous version that only removed the
first tts tag &#8211; rather than all of them. With this update all of the
tts tags are removed from the strings. This should fix queries such as
&#8220;What time is it in New York?&#8221;.</p>
</li>
<li><p class="first">The server has been updated to better handle dates. In the previous version
the server was replacing any time related dictionary entry with the current
date and time of the server. The server has been updated to try to convert
the time values given (number of seconds since the epoch) into the correct
date. When doing this it seemed that the resulting date was usually thirty
one years in the past from its actual date. The current solution (read:
hack) is to simply add thirty one years to the resulting date. This seems
to have worked for almost all of my tests, but I have noticed that it
resulted in Siri speaking a date that was one day before the correct date
(which was being displayed on the phone). This requires further
investigation.</p>
</li>
<li><p class="first">The Python object dictionaries that are recieved from the iPhone and the
Guzzoni server often contain entries that have hexadecimal values within
the strings. Sending these strings to the iPhone typically results in the
iPhone crashing and rebooting. The current solution is to replace the
common hexadecimal values in the strings with their ascii equivalent.
The speakableSelectionResponse and selectionResponse keys sometimes
contain hexadecimal values, but were not being replaced. This update
makes sure to replace the hexadecimal characters in these entries as
well. This fixes queries that involve button presses to disambiguate
a specific query.</p>
</li>
<li><p class="first">Added instructions to the online documentation for configuring
pysiriproxy to use the iOS 6 server (kryten.apple.com).</p>
</li>
<li><p class="first">Updated gen_certs.sh to take a &#8220;-v&#8221; argument which allows the user to
specify the version of iOS the generated certificate should support.
The default is for the certificate to support <tt class="docutils literal"><span class="pre">*.apple.com</span></tt> which will
support both iOS 5 and iOS 6.</p>
<p>Example usage: ./gen_certs.sh -v iOS6</p>
</li>
<li><p class="first">Updated the setDnsmasq.sh script to add dnsmasq support for both the
guzzoni and kryten webservers (which are iOS 5 and iOS 6 servers
respectively). This allows the server to accept connections from
iPhones with either version without being re-configured.</p>
</li>
<li><p class="first">Updated the default pysiriproxy.cfg file to connect to the
iOS 6 server at kryten.apple.com rather than the iOS 5 server
at guzzoni.apple.com.</p>
</li>
<li><p class="first">Updated the utf module to support replacing the hexadecimal
characters representing a degree symbol. Currently the hex
characters will be replaced by the string &#8221; degrees&#8221; which
is semantically the same string.</p>
</li>
<li><p class="first">Updated the setup.py script to add setup dependencies for specific
version of: biplist, twisted, and pyamp. This should allow the
setup script to handle downloading and installing the necessary
versions of each of these modules.</p>
</li>
<li><p class="first">Fixed the installation setup procedure. The previous version had an
error due to the update to using setuptools rather than disttools.
The default configuration files were no longer located in the
expected directory and thus could not be copied to the user&#8217;s
home configuration directory. This has been fixed in this version.</p>
</li>
<li><p class="first">Updated the documentation to explain modifications to support
using iOS 5 and iOS 6 versions.</p>
</li>
<li><p class="first">Created the <strong>Timestamp</strong> configuration property under the
Logging section. This variable contains the format string which
will be used to apply a date to all logged messages.</p>
<p>Example format: &#8220;%Y-%m-%d&#8221; yields 2012-08-04</p>
<p>For more details on the format string see the man page for the
date command. No timestamp will be applied to logged messages
if this property is an empty string.</p>
</li>
<li><p class="first">Moved config folder and files underneath the pysiriproxy source
directory so that the setup script can include them automatically.
Setuptools provides the ability to install any SVN controlled
data files it finds with one line. This removed some unnecessary
code in the setup script.</p>
</li>
<li><p class="first">Added step to install python*-dev to the installation
instructions for twisted. Without this easy_install fails to
install twisted.</p>
</li>
<li><p class="first">Fixed bug with converting specific object keys to unicode. In
previous versions this was not functioning correctly, and thus
text to speech (TTS) tags would cause the iPhone to crash. Now
the strings are being converted to unicode properly which allows
the TTS tags to function as expected. These strings no longer
need to have special hexadecimal characters replaced either.</p>
</li>
</ol>
</div>
<div class="section" id="release-0-0-5">
<h2>Release 0.0.5<a class="headerlink" href="#release-0-0-5" title="Permalink to this headline">¶</a></h2>
<ol class="arabic simple">
<li>Using StringIO to send a string containing plist data to CFPropertyList
instead of writing a file and deleting the file afterward.</li>
</ol>
</div>
<div class="section" id="release-0-0-4">
<h2>Release 0.0.4<a class="headerlink" href="#release-0-0-4" title="Permalink to this headline">¶</a></h2>
<ol class="arabic simple">
<li>Using the biplist module to convert plist objects created by
CFPropertyList into binary plists. The previous method was to call the
external plutil Perl script. This was reported as causing significant
delays (0.5 to 1.5 seconds) while running pysiriproxy on an iPhone. This
change solves that issue by doing the conversion in Python rather than
using the Perl script.</li>
<li>Updated setup.py script to allow distributions to be created and uploaded
to the Python Package Index.</li>
<li>Updated the documentation to include installation instructions for biplist,
and for using setuptools to install pysiriproxy.</li>
</ol>
</div>
<div class="section" id="release-0-0-3">
<h2>Release 0.0.3<a class="headerlink" href="#release-0-0-3" title="Permalink to this headline">¶</a></h2>
<ol class="arabic simple">
<li>The connection to the Guzzoni web server is now tied to the iPhone
connection. The Guzzoni connection is only established once the iPhone
connection is finished, and both are closed when the iPhone connection
is lost. This resolves an issue where the server was no longer usable
after a long period of inactivity &#8211; the Guzzoni connection was closed
and not being re-established.</li>
<li>Added the ability to create map locations and send them to the iPhone
user so that they are displayed in a list of locations.</li>
<li>Added the ability to send directions between two locations to the
iPhone user which are displayed in the map. The directions can be:
walking, driving, or public transportation directions.</li>
<li>Created a new plugin to demonstrate how to create locations and
directions.</li>
</ol>
</div>
<div class="section" id="release-0-0-2">
<h2>Release 0.0.2<a class="headerlink" href="#release-0-0-2" title="Permalink to this headline">¶</a></h2>
<ol class="arabic simple">
<li>Documentation updated to fix small mistakes in installation instructions on
Ubuntu 11.10, and 12.04.</li>
<li>The siriproxy script has been made executable to persist through the SVN
checkout.</li>
<li>Added documentation on the changes made to each version of pysiriproxy.</li>
<li>Fixed issue with sequential requests not working. The new requests were
blocked by the previously matched plugin causing the Siri button to continuously
spin. Now the context is reset on a request completed message (which should
be sent at the completion of all Plugins). This keeps new requests from being
blocked, and allows Siri to properly respond to a series of questions.</li>
</ol>
</div>
<div class="section" id="release-0-0-1">
<h2>Release 0.0.1<a class="headerlink" href="#release-0-0-1" title="Permalink to this headline">¶</a></h2>
<p>Initial release of pysiriproxy.</p>
</div>
</div>


          </div>
        </div>
      </div>
      <div class="sphinxsidebar">
        <div class="sphinxsidebarwrapper">
  <h3><a href="index.html">Table Of Contents</a></h3>
  <ul>
<li><a class="reference internal" href="#">Changelog</a><ul>
<li><a class="reference internal" href="#release-0-0-7">Release 0.0.7</a></li>
<li><a class="reference internal" href="#release-0-0-6">Release 0.0.6</a></li>
<li><a class="reference internal" href="#release-0-0-5">Release 0.0.5</a></li>
<li><a class="reference internal" href="#release-0-0-4">Release 0.0.4</a></li>
<li><a class="reference internal" href="#release-0-0-3">Release 0.0.3</a></li>
<li><a class="reference internal" href="#release-0-0-2">Release 0.0.2</a></li>
<li><a class="reference internal" href="#release-0-0-1">Release 0.0.1</a></li>
</ul>
</li>
</ul>

  <h4>Previous topic</h4>
  <p class="topless"><a href="_generated/pysiriproxy_utils.html"
                        title="previous chapter">The utils module</a></p>
  <h4>Next topic</h4>
  <p class="topless"><a href="writing_objectFilters.html"
                        title="next chapter">Object filters</a></p>
  <h3>This Page</h3>
  <ul class="this-page-menu">
    <li><a href="_sources/changelog.txt"
           rel="nofollow">Show Source</a></li>
  </ul>
<div id="searchbox" style="display: none">
  <h3>Quick search</h3>
    <form class="search" action="search.html" method="get">
      <input type="text" name="q" size="18" />
      <input type="submit" value="Go" />
      <input type="hidden" name="check_keywords" value="yes" />
      <input type="hidden" name="area" value="default" />
    </form>
    <p class="searchtip" style="font-size: 90%">
    Enter search terms or a module, class or function name.
    </p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
        </div>
      </div>
      <div class="clearer"></div>
    </div>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="genindex.html" title="General Index"
             >index</a></li>
        <li class="right" >
          <a href="py-modindex.html" title="Python Module Index"
             >modules</a> |</li>
        <li class="right" >
          <a href="writing_objectFilters.html" title="Object filters"
             >next</a> |</li>
        <li class="right" >
          <a href="_generated/pysiriproxy_utils.html" title="The utils module"
             >previous</a> |</li>
        <li><a href="index.html">pysiriproxy v0.0.7 documentation</a> &raquo;</li> 
      </ul>
    </div>
    <div class="footer">
        &copy; Copyright 2012, Brett Ponsler.
      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.1.
    </div>
  </body>
</html>